package cn.edu.scau.cmi.ema.controller;

import cn.edu.scau.cmi.ema.base.CmiPagination;
import cn.edu.scau.cmi.ema.base.CmiEmaController;
import cn.edu.scau.cmi.ema.domain.Adulterlink;
import cn.edu.scau.cmi.ema.domain.Event;
import cn.edu.scau.cmi.ema.domain.Eventadulterlink;
import cn.edu.scau.cmi.ema.util.CmiHibernateProxyUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Set;

@Controller("EventadulterlinkController")
public class EventadulterlinkController extends CmiEmaController {

	@RequestMapping("/listEventadulterlinks")
	public ModelAndView listEventadulterlinks(HttpServletRequest request, @ModelAttribute CmiPagination pagination) {
		ModelAndView mav = new ModelAndView();

		pagination = eventadulterlinkPaginationService.updatePagination(request, pagination);
		Set<Eventadulterlink> eventadulterlinks = eventadulterlinkPaginationService
				.getPaginationEventadulterlinks(pagination);

		mav.addObject("eventadulterlinks", eventadulterlinks);
		mav.addObject("entityName", "eventadulterlink");
		mav.addObject("pagination", pagination);
		mav.setViewName("eventadulterlink/listEventadulterlinks");
		return mav;
	}

	public String listEventadulterlinks() {
		return "redirect:/listEventadulterlinks";
	}

	@RequestMapping("/viewEventadulterlink")
	public ModelAndView viewEventadulterlink(@RequestParam Integer eventadulterlinkId) {
		ModelAndView mav = new ModelAndView();
		mav.addObject("eventadulterlink", eventadulterlinkDAO.findEventadulterlinkByPrimaryKey(eventadulterlinkId));
		mav.setViewName("eventadulterlink/viewEventadulterlink");
		return mav;
	}

	@RequestMapping(value = "/confirmDeleteEventadulterlinks")
	public ModelAndView confirmDeleteEventadulterlinks(
			@RequestParam(value = "deleteEventadulterlinksIds", required = true) Set<Integer> deleteEventadulterlinksIds) {
		ModelAndView mav = new ModelAndView();

		Set<Eventadulterlink> deleteEventadulterlinks = eventadulterlinkDAO
				.findEventadulterlinksByIds(deleteEventadulterlinksIds);
		Set<Eventadulterlink> referencedEventadulterlinks = eventadulterlinkService
				.loadReferenceEventadulterlinks(deleteEventadulterlinks);
		boolean hasReferenced;
		if (referencedEventadulterlinks.size() == 0) {
			mav.addObject("deleteEntitys", deleteEventadulterlinks);
			hasReferenced = false;
		} else {
			deleteEventadulterlinks.removeAll(referencedEventadulterlinks);
			mav.addObject("referencedEntitys", referencedEventadulterlinks);
			mav.addObject("deleteEntitys", deleteEventadulterlinks);
			hasReferenced = true;
		}
		mav.addObject("entityName", "Eventadulterlink");
		mav.addObject("hasReferenced", hasReferenced);
		mav.setViewName("forward:/listEventadulterlinks");
		return mav;
	}

	@RequestMapping("/deleteEventadulterlink")
	public String deleteEventadulterlink(@RequestParam Integer eventadulterlinkId) {
		Eventadulterlink eventadulterlink = eventadulterlinkDAO.findEventadulterlinkByPrimaryKey(eventadulterlinkId);
		eventadulterlinkService.deleteEventadulterlink(eventadulterlink);
		return "forward:/listEventadulterlinks";
	}

	@RequestMapping("/confirmDeleteEventadulterlink")
	public ModelAndView confirmDeleteEventadulterlink(@RequestParam Integer eventadulterlinkId) {

		ModelAndView mav = new ModelAndView();

		mav.addObject("eventadulterlink", eventadulterlinkDAO.findEventadulterlinkByPrimaryKey(eventadulterlinkId));

		mav.setViewName("eventadulterlink/deleteEventadulterlink");

		return mav;
	}

	@RequestMapping("/deleteEventadulterlinks")
	public String deleteEventadulterlinks(
			@RequestParam(value = "deleteEventadulterlinksId", required = true) Set<Integer> deleteEventadulterlinksId) {
		eventadulterlinkService.deleteEventadulterlinks(deleteEventadulterlinksId);
		return "forward:/listEventadulterlinks";
	}

	@RequestMapping("/editEventadulterlink")
	public ModelAndView editEventadulterlink(@RequestParam Integer eventadulterlinkId) {

		ModelAndView mav = new ModelAndView();

		Eventadulterlink eventadulterlink = eventadulterlinkDAO.findEventadulterlinkByPrimaryKey(eventadulterlinkId);
		// 将需要编辑的对象加到mav对象中
		mav.addObject("eventadulterlink", eventadulterlink);

		// 把所有的引用eventadulterlink对象都添加到mav对象，供前台页面选择
		mav.addAllObjects(eventadulterlinkService.loadEventadulterlinkObjectReferencedSet(eventadulterlink));

		// 将编辑页面eventadulterlink添加到mav中
		mav.setViewName("eventadulterlink/editEventadulterlink");
		return mav;
	}

	@RequestMapping("/newEventadulterlink")
	public ModelAndView newEventadulterlink() {
		ModelAndView mav = new ModelAndView();
		Eventadulterlink eventadulterlink = new Eventadulterlink();

		mav.addObject("eventadulterlink", eventadulterlink);

		// 把所有的引用eventadulterlink对象都添加到mav对象，供前台页面选择
		mav.addAllObjects(eventadulterlinkService.loadEventadulterlinkObjectReferencedSet(eventadulterlink));

		mav.addObject("newFlag", true);
		mav.setViewName("eventadulterlink/editEventadulterlink");

		return mav;
	}

	@RequestMapping("/saveEventadulterlink")
	public ModelAndView saveEventadulterlink(@ModelAttribute Eventadulterlink eventadulterlink) {

		ModelAndView mav = new ModelAndView();

		Adulterlink adulterlinkTemp = eventadulterlink.getAdulterlink();
		Adulterlink adulterlink = adulterlinkTemp == null ? null
				: CmiHibernateProxyUtil.deproxy(adulterlinkDAO.findAdulterlinkById(adulterlinkTemp.getId()));
		Event eventTemp = eventadulterlink.getEvent();
		Event event = eventTemp == null ? null
				: CmiHibernateProxyUtil.deproxy(eventDAO.findEventById(eventTemp.getId()));

		Eventadulterlink existingEventadulterlink = CmiHibernateProxyUtil.deproxy(
				eventadulterlinkDAO.findEventadulterlinkByPhysicalPrimaryKey(event.getId(), adulterlink.getId()));

		eventadulterlink.setAdulterlink(adulterlink);
		eventadulterlink.setEvent(event);
		// 新建记录
		if (eventadulterlink.getId() == null) {
			if (eventadulterlink.equals(existingEventadulterlink)) {

				mav.addAllObjects(eventadulterlinkService.loadEventadulterlinkClassReferencedSet(eventadulterlink));
				// mav = editContinue(mav, eventadulterlink);
				mav.addObject("isInsertSuccess", "false");
				mav.setViewName("eventadulterlink/editEventadulterlink");
			} else {
				eventadulterlinkService.saveEventadulterlink(eventadulterlink);
				mav.setViewName("forward:/listEventadulterlinks");
			}
		}
		// 编辑记录
		else {
			Eventadulterlink originEventadulterlink = CmiHibernateProxyUtil
					.deproxy(eventadulterlinkDAO.findEventadulterlinkByPrimaryKey(eventadulterlink.getId()));
			if (!eventadulterlink.equals(originEventadulterlink) && eventadulterlink.equals(existingEventadulterlink)) {
				mav.addAllObjects(eventadulterlinkService.loadEventadulterlinkClassReferencedSet(eventadulterlink));
				mav.addObject("isInsertSuccess", "false");
				mav.setViewName("eventadulterlink/editEventadulterlink");
			} else {
				eventadulterlinkService.saveEventadulterlink(eventadulterlink);
				mav.setViewName("forward:/listEventadulterlinks");
			}
		}
		return mav;
	}

	@RequestMapping("/eventadulterlinkController/binary.action")
	public ModelAndView streamBinary(@ModelAttribute HttpServletRequest request,
			@ModelAttribute HttpServletResponse response) {
		ModelAndView mav = new ModelAndView();
		mav.setViewName("streamedBinaryContentView");
		return mav;

	}

}
